package com.study.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.{SparkConf, SparkContext}

object Scala12_RDD_Operator_Transform{
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    conf.set("spark.local.dir","D:\\hadoopbook\\spark\\test")
    val sc = new SparkContext(conf)
    // TODO 算子 - 转换 -  双值类型 交集 并集 差集 拉链

    val rdd = sc.makeRDD(List(1,2,3,4),2)
    val rdd1 = sc.makeRDD(List(3,4,5,6),2)
    val rdd2 = sc.makeRDD(List("1","2","3","4"),2)

    // 交集 不允许两个类型不同的数据集操作
    println(rdd.intersection(rdd1).collect().mkString(","))//4,3
    // 并集 不允许两个类型不同的数据集操作
    println(rdd.union(rdd1).collect().mkString(","))//1,2,3,4,3,4,5,6
    // 差集 不允许两个类型不同的数据集操作
    println(rdd.subtract(rdd1).collect().mkString(","))//2,1
    // 拉链 允许两个类型不同的数据集操作
    // Can only zip RDDs with same number of elements in each partition
    // Can't zip RDDs with unequal numbers of partitions: List(2, 3)
    println(rdd.zip(rdd1).collect().mkString(","))//(1,3),(2,4),(3,5),(4,6)
    println(rdd.zip(rdd2).collect().mkString(","))//(1,1),(2,2),(3,3),(4,4)
    sc.stop()


  }

}
